This disclosure relates to data processing and storage, and more particularly, to management of a non-volatile memory system, such as a flash memory system. Still more particularly, the disclosure relates to improving health management of a non-volatile memory system by performing garbage collection based at least in part on block health.
NAND flash memory is an electrically programmable and erasable non-volatile memory technology that stores one or more bits of data per memory cell as a charge on the floating gate of a transistor or a similar charge trap structure. In a typical implementation, a NAND flash memory array is organized in blocks (also referred to as “erase blocks”) of physical memory, each of which includes multiple physical pages each in turn containing a multiplicity of memory cells. By virtue of the arrangement of the word and bit lines utilized to access memory cells, flash memory arrays can generally be programmed on a page basis, but are erased on a block basis.
As cell densities and the number of bits stored per cell in flash memory continue to increase in subsequent generations of flash technology, the data stored in the memory cells to become more vulnerable to bit errors induced by the number of program/erase cycles, read disturbs, high ambient temperatures, long storage durations and other factors. Consequently, the number of program/erase cycles for which flash memories are rated have generally been declining even while storage density and storage cost per unit of data have been improving.
To obtain the longest useful life from a given flash memory various health management techniques have been proposed. For example, some flash memory systems implement read sweeping, which entails an ongoing or periodic background read of data stored within the flash memory to ensure that the data can be correctly read and decoded. A flash memory system may also implement wear leveling, which relocates data within the flash memory to equalize wear between blocks. Block calibration may also be implemented to optimize read threshold voltages, such that observed error counts on reads are reduced. In addition, health binning may be employed to classify blocks based on, for example, one or more health metrics, such as error counts, and to perform data placement based on the block classification.